home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / tex / cstex / disk1 / cstexdoc.lzh / TEX_DOC / KNUTH.TEX < prev    next >
Encoding:
Text File  |  1990-03-01  |  20.8 KB  |  526 lines

  1. %format plain
  2. %       Knuth's article
  3.  
  4. \font\logo=logo10 % font used for the METAFONT logo
  5. \font\logosl=logo10 % font used for slanted METAFONT logo
  6.  
  7. \def\MF{{\logo META}\-{\logo FONT}}
  8. \def\MFbook{{\sl The {\logosl METAFONT}\kern1pt book}}
  9. \def\TeX{T\hbox{\hskip-.1667em\lower.424ex\hbox{E}\hskip-.125em X}}
  10. \def\ldt{\mathinner{\ldotp\ldotp}}
  11.  
  12. \line{\bf The New Versions of \TeX\ and \MF\ \hfill by Donald E. Knuth}
  13. \bigskip
  14. \noindent
  15. For more than five years I held firm to my conviction that a stable system
  16. was far better than a system that continues to evolve. But during the TUG
  17. meeting at Stanford in August, 1989, I~was persuaded to make one last set of
  18. changes, in order to bring \TeX\ and \MF\ to a state of completion consistent
  19. with their overall philosophy and goals.
  20.  
  21. The main reason for the changes was the fact that I~had guessed wrong about
  22. 7-bit character sets versus 8-bit character sets. I~believed that standard text
  23. input would continue indefinitely to be confined to at most 128~characters,
  24. since I~did not think a keyboard with 256~different outputs would be
  25. especially efficient. Needless to say, I~was proved wrong, especially by
  26. developments in Europe and Asia. As soon as I~realized that a text formatting
  27. program with 7-bit input would rapidly begin to seem as archaic as the 6-bit
  28. systems we once had, I~knew that a fundamental revision was necessary.
  29.  
  30. But the 7-bit assumption pervaded everything, so I needed to take the programs
  31. apart and redo them thoroughly in 8-bit style. This put \TeX\
  32. onto the operating table and under the knife
  33. for the first time since 1984, and I~had a final
  34. opportunity to include a few new features that had occurred to me or been
  35. suggested by users since then.
  36.  
  37. The new extensions are entirely upward compatible with previous versions
  38. of \TeX\ and \MF\ (with a few small exceptions mentioned below).
  39. This means that error-free inputs to the old \TeX\ and \MF\ will still
  40. be error-free inputs to the new systems, and they will still produce the
  41. same outputs.
  42.  
  43. However, anybody who dares to use the new extensions will be unable to get
  44. the desired results from old versions of \TeX\ and \MF\null. I~am therefore
  45. asking the \TeX\ community to update all copies of the old versions
  46. as soon as possible. Let us root out and destroy the obsolete 7-bit systems,
  47. even though we were able to do many fine things with them.
  48.  
  49. In this note I'll discuss the changes, one by one; then I'll describe
  50. the exceptions to upward compatibility.
  51.  
  52. \bigskip
  53. \noindent
  54. {\bf 1. The character set.}
  55. Up to 256 distinct characters are now allowed in input files. The codes that
  56. were formerly limited to the range $0\ldt 127$ are now in the range
  57. $0\ldt 255$. All characters are alike; you are free to use any character
  58. for any purpose in \TeX, assigning appropriate values to its
  59. {\tt{\char'134}catcode},
  60. {\tt{\char'134}mathcode},
  61. {\tt{\char'134}lccode},
  62. {\tt{\char'134}uccode},
  63. {\tt{\char'134}sfcode},
  64. and
  65. {\tt{\char'134}delcode}.
  66. Plain \TeX\ initializes these code values for characters above~127 just as
  67. it initializes the codes for ordinary punctuation characters
  68. like~`{\tt{\char'041}}'.
  69.  
  70. There's a new convention for inputting an arbitrary 8-bit character
  71. to \TeX\ when you can't necessarily type~it: The four consecutive
  72. characters
  73. {\tt{\char'136\char'136}}$\alpha\beta$, where $\alpha$ and~$\beta$ are
  74. any of the ``lowercase hexadecimal digits''
  75. {\tt{0}},
  76. {\tt{1}},
  77. {\tt{2}},
  78. {\tt{3}},
  79. {\tt{4}},
  80. {\tt{5}},
  81. {\tt{6}},
  82. {\tt{7}},
  83. {\tt{8}},
  84. {\tt{9}},
  85. {\tt{a}},
  86. {\tt{b}},
  87. {\tt{c}},
  88. {\tt{d}},
  89. {\tt{e}},
  90. or
  91. {\tt{f}},
  92. are treated by \TeX\ on input as if they were a single character with
  93. specified code digits. For example,
  94. {\tt{\char'136\char'136}80}
  95. gives character code~128; the entire character set
  96. is available from
  97. {\tt{\char'136\char'136}00}
  98. to
  99. {\tt{\char'136\char'136}ff}.
  100. The old convention discussed in Appendix~C, under which character~0 was
  101. {\tt{\char'136\char'136\char'100}},
  102. character~1 (control--A) was
  103. {\tt{\char'136\char'136}A},
  104. \dots,
  105. and character~127 was
  106. {\tt{\char'136\char'136}?},
  107. still works for the first 128~character codes, except that the
  108. character following
  109. {\tt{\char'136\char'136}}
  110. should not be a lowercase hexadecimal digit when the immediately following
  111. character is another such digit.
  112.  
  113. The existence of 8-bit characters has less effect
  114. in \MF\ than in \TeX, because \MF's character classes are built in to each
  115. installation. The normal set of 95~printing characters described on
  116. page~51 of
  117. \MFbook\
  118. can be supplemented by extended characters as discussed on page~282, but this
  119. is rarely done because it leads to problems of portability. \MF's
  120. {\bf char} operator is now redefined to operate modulo~256 instead
  121. of modulo~128.
  122.  
  123. \bigskip\noindent
  124. {\bf 2. Hyphenation tables.}
  125. Up to 256 distinct sets of rules for hyphenation are now allowed in \TeX.
  126. There's a new integer parameter called
  127. {\tt{\char'134}language},
  128. whose current value specifies the hyphenation convention in force. If
  129. {\tt{\char'134}language}
  130. is negative or greater than~255, \TeX\ acts as if
  131. $\hbox{\tt{\char'134}language}=0$.
  132.  
  133. When you list hyphenation exceptions with \TeX's
  134. {\tt{\char'134}hyphenation}
  135. primitive, those exceptions apply to the current language only. Similarly,
  136. the
  137. {\tt{\char'134}patterns}
  138. primitive tells \TeX\ to remember new hyphenation patterns for the current
  139. language; this operation is allowed only in the special ``initialization''
  140. program called {\tt INITEX}\null. Hyphenation exceptions can be added at any
  141. time, but new patterns cannot be added after a paragraph has been typeset.
  142.  
  143. When \TeX\ reads the text of a paragraph, it automatically inserts
  144. ``whatsit nodes'' into the horizontal list for that paragraph whenever
  145. a character comes from  a different
  146. {\tt{\char'134}language}
  147. than its predecessor. In that way \TeX\ can tell what hyphenation
  148. rules to use on each word of the paragraph even if you switch
  149. frequently back and forth among many different languages.
  150.  
  151. The special whatsit nodes are inserted automatically in unrestricted horizontal
  152. mode (i.e.,  when you are creating a paragraph, but not when you are
  153. specifying the contents of an hbox). You can insert a special whatsit
  154. yourself in restricted horizontal mode by saying
  155. {\tt{\char'134}language}$\langle$number$\rangle$.
  156. This is needed only if you are doing something tricky, like unboxing some
  157. contribution to a paragraph.
  158.  
  159. \bigskip\noindent
  160. {\bf 3. Hyphenated fragment control.}
  161. \TeX\ has new parameters
  162. {\tt{\char'134}lefthyphenmin}
  163. and
  164. {\tt{\char'134}righthyphenmin},
  165. which specify the smallest word fragments that will appear at the beginning
  166. or end of a word that has been hyphenated. Previously the values
  167. {\tt{\char'134}lefthyphenmin=2}
  168. and
  169. {\tt{\char'134}righthyphenmin=3}
  170. were hard-wired into \TeX\ and impossible to change. Now plain \TeX\
  171. format supplies the old values, which are still recommended for most
  172. American publications; but you can get more hyphens by decreasing these
  173. parameters, and you can get fewer hyphens by increasing them. If the sum of
  174. {\tt{\char'134}lefthyphenmin}
  175. and
  176. {\tt{\char'134}righthyphenmin}
  177. is~63 or more, all hyphenation is suppressed. (You can also suppress
  178. hyphenation by using a font with
  179. {\tt{\char'134}hyphenchar=-1},
  180. or by switching to a
  181. {\tt{\char'134}language}
  182. that has no hyphenation patterns or exceptions.)
  183.  
  184. \bigskip\noindent
  185. {\bf 4. Smarter ligatures.}
  186. Now here's the most radical change.
  187. Previous versions of \TeX\ had only one kind of ligature, in which two
  188. characters like~`f' and~`i' were changed into a single character like~`fi'
  189. when they appeared consecutively. The new \TeX\ understands much more
  190. complex constructions by which, for example, we could change
  191. an~`i' following~`f' to a dotless~`\i' while the~`f' remains
  192.  unchanged:~`f\i'.
  193.  
  194. As before, you get ligatures only if they have been provided in the font
  195. you are using. So let's look at the new features of \MF\ by which
  196. enhanced ligatures can be created. A~\MF\ programmer can specify a
  197. ``ligature/kerning program'' for any character of the font being
  198. created. If, for example, the~`fi' combination appears in font
  199. position~12, the replacement of~`f' and~`\i' by~`fi' is specified by
  200. including the statement
  201. $$\hbox{\tt{"i"~=:~12}}$$
  202. in the ligature/kerning program for {\tt{"f"}}; this is \MF's present
  203. convention.
  204.  
  205. The new ligatures allow you to retain one or both of the original characters
  206. while inserting a new one. Instead of {\tt{=:}} you can also write
  207. {\tt{\char'174}=:} if you wish to retain the left character, or
  208. {\tt{=:{\char'174}}} if you wish to retain the right character,
  209. or {\tt{\char'174}=:{\char'174}} if you want to keep them both.
  210. For example, if the dotless~\i\ appears in font position~16, you can
  211. get the behavior mentioned above by having
  212. $$\hbox{%
  213. {\tt{"i" {\char'174}=: 16}}
  214. }$$
  215. in f's program.
  216.  
  217. There also are four additional operators
  218. $$\hbox{%
  219. {\tt{\char'174}=:{\char'076}},\qquad
  220. {\tt{=:{\char'174\char'076}}},\qquad
  221. {\tt{\char'174}=:{\char'174\char'076}},\qquad
  222. {\tt{\char'174}=:{\char'174\char'076\char'076}},
  223. }$$
  224. where each {\tt\char'076} tells \TeX\ to shift its focus one position
  225. to the right. For example, if~f and~i had been replaced by~f
  226. and dotless~\i\ as above, \TeX\ would begin again to execute f's
  227. ligature/kern program, possibly inserting a kern before the dotless~\i,
  228. or possibly changing the~f to an entirely different character, etc.
  229. But if the instruction had been
  230. $$\hbox{%
  231. {\tt{"i" {\char'174}=:{\char'076} 16}}
  232. }$$
  233. instead, \TeX\ would turn immediately to the ligature/kern program for
  234. characters following character~16 (the dotless \i);
  235. no further change would be made between~f and~\i\ even if the font
  236. had something specified there.
  237.  
  238. \bigskip\noindent
  239. {\bf 5. Boundary ligatures.}
  240. Every consecutive string of `characters' read by \TeX\ in horizontal mode
  241. (after macro expansion) can be called a `word'. (Technically we consider
  242. a `character' in this definition to be either a character whose
  243. {\tt{\char'134}catcode}
  244. is a
  245. letter or otherchar, or a control sequence that has been
  246. {\tt{\char'134}let}
  247. equal to such a character, or a control sequence that has been defined by
  248. {\tt{\char'134}chardef},
  249. or the construction
  250. {\tt{\char'134}char}$\langle$number$\rangle$.)
  251. The new \TeX\ now imagines that there is an invisible ``left boundary
  252. character'' just before every such word, and an invisible ``right boundary
  253. character'' just after it. These boundary characters take effect if the font
  254. designer has specified ligatures and/or kerning between them and the
  255. adjacent letters. Thus, the first or last character of a word can
  256. now be made to change its shape automatically.
  257.  
  258. A ligature/kern program for the left boundary character is specified within
  259. \MF\ by using the special label~
  260. {\tt{\char'174\char'174}:}
  261. in a {\bf ligtable} command. A~ligature or kern with the right
  262. boundary character is specified by assigning a value to the new internal
  263. \MF\ parameter
  264. {\it boundarychar},
  265. and by specifying a ligature or kern with respect to this character.
  266. The
  267. {\it boundarychar\/}
  268. may or may not exist as a real character in the font.
  269.  
  270. For example, suppose we want to change the first letter of a word from~`F'
  271. to~`ff' if we are doing some olde English. The \MF\ font designer could then
  272. say
  273. $$\hbox{ligtable {\tt{\char'174\char'174}: "F" {\char'174}:= 11}}$$
  274. if character 11 is the `ff'. The same ligtable instruction should
  275. appear in the programs for characters like~( and~` and~`` and~- that can
  276. precede strings of letters; then `{\tt Bassington-French}' will
  277. yield `Bassington-ffrench'.
  278.  
  279. If the `s' of our font is the pre-19th
  280. century~s that looks like a mutilated~`f', and if we have a modern~`s'
  281. in position~128, we can convert the final~s's as Ben Franklin did by
  282. introducing ligature instructions such as
  283. $$\vcenter{\halign{{\tt{#}}\hfil$\;$&{\tt{#}}\hfil\cr
  284. boundarychar :=&255;\cr
  285. ligtable "s":&255 =:{\char'174} 128,\cr
  286. &"." =:{\char'174} 128,\cr
  287. &"," =:{\char'174} 128,\cr
  288. &")" =:{\char'174} 128,\cr
  289. &"'" =:{\char'174} 128,\cr}}$$
  290. and so on. (A true oldstyle font would also have
  291. ligatures for
  292. ss and si and sl and ssi and ssl
  293. and~st; it would be fun to create a Computer Modern Oldstyle.)
  294.  
  295. The implicit left boundary character is omitted by \TeX\ if you say
  296. {\tt{\char'134}noboundary}
  297. just before the word; the implicit right boundary is omitted if you say
  298. {\tt{\char'134}noboundary}
  299. just after it.
  300.  
  301. \bigskip\noindent
  302. {\bf 6. More compact ligatures.}
  303. Two or more ligtables can now share common code. To do this in \MF, you
  304. say `{\bf skipto}~$\langle n\rangle$' at the end of one {\bf ligtable}
  305. command, then you say `$\langle n\rangle$::' within another. Such local labels
  306. can be reused; e.g., you can say {\bf skipto}~1 again after {\tt 1::} has
  307. appeared, and this skips to the {\it next\/} appearance of~{\tt 1::}.  There
  308. are 256~local labels, numbered~0 to~255. Restriction: At most 128 ligature
  309. or kern commands can intervene between a {\bf skipto} and its matching label.
  310.  
  311. The {\tt TFM} file format has been upwardly extended to allow more than 32,500
  312. ligature/kern commands per font. (Previously there was an effective limit
  313. of 256.)
  314.  
  315. \bigskip\noindent
  316. {\bf 7. Better looking sloppiness.}
  317. There is now a better way to avoid overfull boxes, for people who don't want
  318. to look at their documents to fix unfeasible line breaks manually. Previously
  319. people tried to do this by setting
  320. {\tt{\char'134}tolerance=10000},
  321. but the result was terrible because \TeX\ would tend to consolidate
  322. all the badness in one truly horrible line. (\TeX\ considers all badness
  323. $\ge10000$ to be infinitely bad, and all these infinities are equal.)
  324.  
  325. The new feature is a dimension parameter called
  326. {\tt{\char'134}emergencystretch}.
  327. If
  328. {\tt{\char'134}emergencystretch}
  329. is positive and if \TeX\ has been unable to typeset a paragraph without
  330. exceeding the given tolerances, another pass over the paragraph is made
  331. in which \TeX\ pretends that additional stretchability equal to
  332. {\tt{\char'134}emergencystretch}
  333. is present in every line. The effect of this is to scale down all the
  334. badnesses into a range where previously infinite cases become finite;
  335. \TeX\ will find an optimum solution to the scaled-down problem, and this
  336. will be about as good as possible in a practical sense. (The extra stretching
  337. is not really present; therefore underfull boxes will be reported in warning
  338. messges unless
  339. {\tt{\char'134}hbadness}
  340. is increased.)
  341.  
  342. \bigskip\noindent
  343. {\bf 8. Looking at badness.}
  344. \TeX\ has a new internal integer parameter called
  345. {\tt{\char'134}badness}
  346. that records the badness of the box it has most recently constructed.
  347. If that box was overfull,
  348. {\tt{\char'134}badness}
  349. will be 1000000; otherwise
  350. {\tt{\char'134}badness}
  351. will be between~0 and~10000.
  352.  
  353. \bigskip\noindent
  354. {\bf 9. Looking at the line number.}
  355. \TeX\ also has a new internal integer parameter called
  356. {\tt{\char'134}inputlineno},
  357. which contains the number of the line that \TeX\ would show on an error message
  358. if an error occurred now. (This parameter and
  359. {\tt{\char'134}badness}
  360. are ``read only'' in the same way as
  361. {\tt{\char'134}lastpenalty}:
  362. You can use them in the context of a $\langle$number$\rangle$, e.g., by saying
  363. `{\tt{\char'134}ifnum{\char'134}inputlineno{\char'076\char'134}badness ...\
  364. {\char'134}fi}'
  365. or
  366. `{\tt{\char'134}the{\char'134}inputlineno}',
  367. but you cannot set them to new values.)
  368.  
  369. \bigskip\noindent
  370. {\bf 10. Not looking at error context.}
  371. There's a new integer parameter called
  372. {\tt{\char'134}errorcontextlines}
  373. that specifies the maximum number of two-line pairs of context displayed with
  374. \TeX's error messages (in addition to the top and bottom lines, which always
  375. appear). Plain \TeX\ now sets
  376. {\tt{\char'134}errorcontextlines=5},
  377. but higher level format packages might prefer
  378. {\tt{\char'134}errorcontextlines=1}
  379. or even
  380. {\tt{\char'134}errorcontextlines=0}.
  381. In the latter case, an error that previously involved three or more pairs of
  382. context would now appear as follows:
  383.  
  384. \halign{\qquad\qquad{\tt{#}}\hfil\cr
  385. {\char'041} Error.\cr
  386. $\langle$somewhere$\rangle$ The {\char'134}top\cr
  387. \phantom{$\langle$somewhere$\rangle$ The {\char'134}top\ }line\cr
  388. ...\cr
  389. 1.123 {\char'134}The\cr
  390. \phantom{1.123 {\char'134}The\ }bottom line.\cr}
  391.  
  392. \noindent
  393. (If
  394. {\tt{\char'134}errorcontextlines{\char'074}0}
  395. you wouldn't even see the `{\tt{...}}' here.)
  396.  
  397. \bigskip\noindent
  398. {\bf 11. Output recycling.}
  399. One more new integer parameter completes the set. If
  400. {\tt{\char'134}holdinginserts{\char'076}0}
  401. when \TeX\ is putting the current page into
  402. {\tt{\char'134}box255}
  403. for the
  404. {\tt{\char'134}output}
  405. routine, \TeX\ will not move anything from insertion nodes into the
  406. corresponding boxes; all insertion nodes will stay in place. Designers of
  407. output routines can use this when they want to put the contents of box~255 back
  408. into the current page to be re-broken (because they might want to change
  409. {\tt{\char'134}vsize}
  410. or something).
  411.  
  412. \bigskip\noindent
  413. {\bf 12. Exceptions to upward compatibility.}
  414. The new features of \TeX\ and \MF\ imply that a few things work differently
  415. than before. I~will try to list all such cases here (except when the
  416. previous behavior was erroneous due to a bug in \TeX\ or \MF\null).
  417. I~don't know of any cases where users will actually be affected, because
  418. all of these exceptions are pretty esoteric.
  419.  
  420. \medskip $\bullet$\enspace
  421. \TeX\ used to convert the character strings
  422. {\tt{\char'136\char'136}0},
  423. {\tt{\char'136\char'136}1},
  424. \dots,
  425. {\tt{\char'136\char'136}9},
  426. {\tt{\char'136\char'136}a},
  427. {\tt{\char'136\char'136}b},
  428. {\tt{\char'136\char'136}c},
  429. {\tt{\char'136\char'136}d},
  430. {\tt{\char'136\char'136}e},
  431. {\tt{\char'136\char'136}f}
  432. into the respective single characters
  433. {\tt p},
  434. {\tt q},
  435. \dots,
  436. {\tt y},
  437. {\tt{\char'041}},
  438. {\tt "},
  439. {\tt{\char'043}},
  440. {\tt{\char'044}},
  441. {\tt{\char'045}},
  442. {\tt{\char'046}}.
  443. It will no longer do this if the following character is one of the characters
  444. {\tt 0123456789abcdef}.
  445.  
  446. \medskip $\bullet$\enspace
  447. \TeX\ used to insert no character at the end of an input line if
  448. {\tt{\char'134}endlinechar{\char'076}127}.
  449. It will now insert a character unless
  450. {\tt{\char'134}endlinechar{\char'076}255}.
  451. (As previously,
  452. {\tt{\char'134}endlinechar{\char'074}0}
  453. suppresses the end-of-line character. This character is normally
  454. $13=$ ASCII control--M $=$ carriage return.)
  455.  
  456. \medskip $\bullet$\enspace
  457. Some diagnostic messages from \TeX\ used to have the notation
  458. {\tt ["80]} \dots {\tt ["FF]}
  459. when referring to characters $128\ldots 255$ (for example when displaying the
  460. contents of an overfull box involving fonts that include such characters).
  461. The notation
  462. {\tt{\char'136\char'136}80} $\ldots$
  463. {\tt{\char'136\char'136}ff}
  464. is now used instead.
  465.  
  466. \medskip $\bullet$\enspace
  467. The expressions
  468. {\tt{char128}} and {\tt{char0}} used to be equivalent in \MF; now
  469. {\bf char} is defined modulo~256 instead. Hence {\tt{char-1}} $=$
  470. {\tt{char255}}, etc.
  471.  
  472. \medskip $\bullet$\enspace
  473. {\tt INITEX} used to forget all previous hyphenation patterns each time
  474. you specified
  475. {\tt{\char'134}patterns}.
  476. Now all hyphenation pattern specifications are cummulative, and you are not
  477. permitted to use
  478. {\tt{\char'134}patterns}
  479. after a paragraph has been hyphenated by {\tt INITEX}.
  480.  
  481. \medskip $\bullet$\enspace
  482. \TeX\ used to act a bit differently when you tried to typeset missing
  483. characters of a font. A~missing character is now considered to be a word
  484. boundary, so you will get slightly more diagnostic output when
  485. {\tt{\char'134}tracingcommands{\char'076}0}.
  486.  
  487. \medskip $\bullet$\enspace
  488. \TeX\ and \MF\ will report different statistics at the end of a run because
  489. they now have a different number of primitives.
  490.  
  491. \medskip $\bullet$\enspace
  492. Programs that use the string pool feature of {\tt TANGLE} will no longer run
  493. without changes, because the new {\tt TANGLE} starts numbering multicharacter
  494. strings at~256 instead of~128.
  495.  
  496. \medskip $\bullet$\enspace
  497. {\tt INITEX} programs must now set
  498. {\tt{\char'134}lefthyphenmin=2} and
  499. {\tt{\char'134}righthyphenmin=3}
  500. in order to reproduce their previous behavior.
  501.  
  502. \bye
  503.  
  504.  
  505. ########################################################################
  506.  
  507. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  508. %  Character code reference
  509. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  510. %
  511. %                       Upper case letters: ABCDEFGHIJKLMNOPQRSTUVWXYZ
  512. %                       Lower case letters: abcdefghijklmnopqrstuvwxyz
  513. %                                   Digits: 0123456789
  514. % Square, curly, angle braces, parentheses: [] {} <> ()
  515. %           Backslash, slash, vertical bar: \ / |
  516. %                              Punctuation: . ? ! , : ;
  517. %          Underscore, hyphen, equals sign: _ - =
  518. %                Quotes--right left double: ' ` "
  519. %"at", "number" "dollar", "percent", "and": @ # $ % &
  520. %           "hat", "star", "plus", "tilde": ^ * + ~
  521. %
  522. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  523.  
  524. [ end of message 019 ]
  525. -------
  526.